package com.mvc.interceptor;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * 拦截器接口
 *
 * 不使用servlet 的过滤器filter
 */
public interface HandlerInterceptor {
	
	
	/**
	 * 预处理方法   顺序调用拦截器链
	 * @param request
	 * @param response
	 * @return  默认返回true，表示要进行下一个拦截器或者处理程序；  返回false 表示请求到这里就结束了，直接返回响应，不继续下一个拦截器
	 * @throws Exception
	 */
	default boolean preHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return true;
	}
	
	/**
	 * 后处理方法，在 实际的请求方法调用后 执行，没有返回值，所有的后处理器方法都会执行（除非异常）  handler modelAndView 我用不上删掉了
	 *
	 *    倒序调用拦截器链     必须预处理器返回true 时才能调用，一个某个返回false ，则不再调用
	 * @param request
	 * @param response
	 * @throws Exception
	 */
	default void postHandle(HttpServletRequest request, HttpServletResponse response ,Object result) throws Exception {
	}
	
	
	/**
	 * 在请求完成后 回调    倒序调用拦截器链
	 *
	 *    必须预处理器返回true 时才能调用，一个某个返回false ，则不再调用
	 * @param request
	 * @param response
	 * @param ex
	 * @throws Exception
	 */
	default void afterCompletion(HttpServletRequest request, HttpServletResponse response,Exception ex) throws Exception {
	}
}
